import axios, { AxiosError } from "axios";
import { useUserStore } from "@/store"
import { router } from '@/router';
import { ElMessage } from "element-plus";

const instance = axios.create({
    // baseURL: "http://120.24.64.5:8088/mall-admin",
    baseURL: "http://xue.cnkdl.cn:9082/mall-admin",
    timeout: 5000
})

instance.interceptors.request.use(config => {
    let token = localStorage.getItem('token')
    // console.log(token);
    config.headers && (config.headers['Authorization'] = token)

    // 第二种写法
    // config.headers = config.headers || { }
    // config.headers['Authorization'] = token;
    return config
}, err => {
    return Promise.reject(err)
})

instance.interceptors.response.use(res => {

    const useUser = useUserStore()
    // console.log(res.data);

    if (res.data.code === 401) {
        // 删除token
        localStorage.removeItem("token")
        // 删除路由
        useUser.activeMenus.forEach((item) => {
            router.removeRoute(item.name)
        })
        router.removeRoute("home")
        // console.log(router.getRoutes());
        // 返回Login
        // useRouter只能在组件内或者setup内使用
        // 这里使用按需导出的方式引入
        router.push("/login")
        // setTimeout(() => {
        //     console.log(router.getRoutes());
        // }, 500);
        // 清空pinia数据
        useUser.menus = []
        useUser.username = ""
    }

    res.data.code !== 200 && ElMessage.error(res.data.message)

    return res.data
}, (err: AxiosError) => {
    // console.log(err.);

    // 如果请求不是200，也需要在这进行处理
    ElMessage.error("请求出问题了，请联系管理员");
    ElMessage.error(`请求出问题了，请联系管理员,错误信息为：${err.message}`);
    // 在一些地方，记录一上你的报错 - 例如：localstorage 之类的 - 具体看你们自己的产品要求你们如何实现
    // 如果是请求失败，比如： 404 就 要在这处理
    return Promise.reject(err);
}
);

export default instance